﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Espam.Idiomas.Decimo.Tesis.Negocio;
using Microsoft.Reporting.WebForms;

namespace Espam.Idiomas.Decimo.Tesis.Web
{
    public partial class UI_ScoresComplete : System.Web.UI.Page
    {
        string validaSession = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
                Response.Cache.SetAllowResponseInBrowserHistory(false);
                Response.Cache.SetNoStore();

                if (Session["userEspamIdiomasVarSession001"] == null || Session["rolEspamIdiomasVarSession003"] == null)
                {
                    validaSession = "NoHaIniciadoSession";
                    Response.Redirect("UI_Login.aspx?validaSession=" + validaSession);
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Docente")
                {
                    Response.Redirect("UI_DashboardTeacher.aspx");
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Administradores")
                {
                    CargarDdlCiclo();

                    ddlCiclo.AutoPostBack = true;
                    ddlNivel.AutoPostBack = true;
                    ddlNiv.AutoPostBack = true;
                    Niveles();
                    Niv();

                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Alumno")
                {
                    Response.Redirect("UI_DashboardStudents.aspx");
                }
                MaintainScrollPositionOnPostBack = true;
            }
            MaintainScrollPositionOnPostBack = true;
        }
        private void Niveles()
        {
            ListadoNiveles oLista = new ListadoNiveles();
            List<Nivel> lista = new List<Nivel>();
            oLista.ciclo = 0;
            lista = oLista.getNiveles();
            lista.Insert(0, new Nivel() { nivel = 0, equivalente = "<seleccione>" });
            ddlNivel.DataSource = lista;
            ddlNivel.DataTextField = "equivalente";
            ddlNivel.DataValueField = "nivel";
            ddlNivel.DataBind();

        }
        private void Niv()
        {
            ListadoNiveles oLista = new ListadoNiveles();
            List<Nivel> lista = new List<Nivel>();
            oLista.ciclo = 0;
            lista = oLista.getNiveles();
            lista.Insert(0, new Nivel() { nivel = 0, equivalente = "<seleccione>" });
            ddlNiv.DataSource = lista;
            ddlNiv.DataTextField = "equivalente";
            ddlNiv.DataValueField = "nivel";
            ddlNiv.DataBind();

        }
        private void CargarDdlCiclo()
        {
            Ciclos oCiclo = new Ciclos();
            List<Ciclos> lista = new List<Ciclos>();
            lista = oCiclo.GetCiclos();
            lista.Insert(0, new Ciclos { idCiclo = 0, ciclo = 0 });
            ddlCiclo.DataSource = lista;
            ddlCiclo.DataTextField = "ciclo";
            ddlCiclo.DataValueField = "idCiclo";
            ddlCiclo.DataBind();
        }

        protected void btnGenerarReporte_Click(object sender, EventArgs e)
        {
            if (btnGenerarReporte.Text == "Exportar a PDF")
            {
                if (ddlCiclo.SelectedIndex != 0 && ddlNivel.SelectedIndex != 0)
                {
                    CrearReporte();
                }
                else
                {
                    ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('DEBE SELECCIONAR UN CICLO Y UN NIVEL')", true);
                }
            }
            else
            {
                generagv();

            }
        }

        protected void ddlCiclo_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlCiclo.SelectedIndex==0)
            {
                btnGenerarReporte.Text = "Generar Reporte";
                CargarNiveles();
                CargarModulos();
                fila2Matricula.Visible = false;
            }
            else
            {
                CargarNiveles();
                fila2Matricula.Visible = false;
            }
        }

        private void CargarNiveles()
        {
            ListadoNiveles oLista = new ListadoNiveles();
            List<Nivel> lista = new List<Nivel>();
            oLista.ciclo = int.Parse(ddlCiclo.SelectedItem.Text);
            lista = oLista.getNiveles();
            lista.Insert(0, new Nivel() { nivel = 0, equivalente = "<seleccione un nivel>" });
            ddlNivel.DataSource = lista;
            ddlNivel.DataTextField = "equivalente";
            ddlNivel.DataValueField = "nivel";
            ddlNivel.DataBind();
            btnGenerarReporte.Text = "Generar Reporte";
           
            
        }

      

        protected void ddlNivel_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlNivel.SelectedIndex ==0||ddlCiclo.SelectedIndex==0)
            {
                btnGenerarReporte.Text = "Generar Reporte";
                fila2Matricula.Visible = false;
                CargarModulos();
            }
            else
            {
                CargarModulos();
                fila2Matricula.Visible = false;
            }
        }
        private void CargarModulos()
        {
            Modulos oUsu = new Modulos();
            oUsu.ciclo = int.Parse(ddlCiclo.SelectedItem.Text);
            oUsu.nivel = int.Parse(ddlNivel.SelectedValue);
            List<Modulos> lista = new List<Modulos>();
            lista = oUsu.GetHorariosByRegisterExonerados();
            lista.Insert(0, new Modulos() { idModulo=0,horario="<seleccione>"});
            ddlNiv.DataSource = lista;
            ddlNiv.DataTextField = "horario";
            ddlNiv.DataValueField = "idModulo";
            ddlNiv.DataBind();
            fila2Matricula.Visible = true;
        }

        protected void ddlNiv_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlNiv.SelectedIndex==0)
            {
                 btnGenerarReporte.Text = "Generar Reporte";
            }
            else
            {
                generagv();
                fila2Matricula.Visible = true;

            }
        }
        public void generagv()
        {
            Usuarios oUsu = new Usuarios();
            oUsu.ciclo = int.Parse(ddlCiclo.SelectedItem.Text);
            oUsu.nivel = int.Parse(ddlNivel.SelectedValue);
            oUsu.idModulo = int.Parse(ddlNiv.SelectedValue);
            gvScoresMatriculados.DataSource = oUsu.GetCalificacionesCompletas();
            gvScoresMatriculados.DataBind();
            btnGenerarReporte.Text = "Exportar a PDF";
            if (gvScoresMatriculados.Rows.Count > 0)
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Dttable", String.Format("CargaDataTable('{0}',{1});", "Contenido_gvScoresMatriculados", gvScoresMatriculados.Rows[0].Cells.Count), true);
        }
        private void CrearReporte()
        {
            Usuarios oUsu = new Usuarios();

            // oUsu.idDocente = (int)Session["idDocenteEspamIdiomasVarSession009"];
            //oUsu.nivel = int.Parse(ddlNivel.SelectedValue);
            //oUsu.idHorario = int.Parse(ddlHorario.SelectedValue);
            //DataSet ds = new DataSet();

            //int idDocente = (int)Session["idDocenteEspamIdiomasVarSession009"];
            //EspamIdiomasDataSet.sp_getListaEstudiantesByDocenteDataTable dt = new EspamIdiomasDataSet.sp_getListaEstudiantesByDocenteDataTable();
            //EspamIdiomasDataSetTableAdapters.sp_getListaEstudiantesByDocenteTableAdapter daaaa = new EspamIdiomasDataSetTableAdapters.sp_getListaEstudiantesByDocenteTableAdapter();
            //daaaa.Fill(dt, idDocente, int.Parse(ddlNivel.SelectedValue), int.Parse(ectedValue));


            EspamIdiomasDataSet.sp_getCalificacionesCompletoByCicloAndModuloDataTable dt = new EspamIdiomasDataSet.sp_getCalificacionesCompletoByCicloAndModuloDataTable();
            EspamIdiomasDataSetTableAdapters.sp_getCalificacionesCompletoByCicloAndModuloTableAdapter da = new EspamIdiomasDataSetTableAdapters.sp_getCalificacionesCompletoByCicloAndModuloTableAdapter();
            da.Fill(dt, int.Parse(ddlCiclo.SelectedItem.Text),int.Parse(ddlNiv.SelectedValue));

            ReportViewer viewer = new ReportViewer();
            ReportDataSource RD = new ReportDataSource();
            RD.Value = dt;
            RD.Name = "ecusp_rep_Calificaciones";
            //viewer.LocalReport.ReportPath = Server.MapPath("Reports/Administradores/AlumnosLListado.rdlc");
            viewer.LocalReport.DataSources.Clear();
            viewer.LocalReport.DataSources.Add(RD);
            //viewer.LocalReport.ReportEmbeddedResource = "CalificacionesCompleto.rdlc";
            viewer.LocalReport.ReportPath = Server.MapPath("Reports/Administradores/CalificacionesCompleto.rdlc");
            viewer.LocalReport.Refresh();

            string mimeType;
            string encoding;
            string fileNameExtension;
            string[] streams;
            Warning[] warnings;
            byte[] pdfContent = viewer.LocalReport.Render("PDF", string.Empty, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);

            this.Response.Clear();
            this.Response.ContentType = "application/pdf";
            this.Response.AddHeader("Content-disposition", "attachment; filename=CalificacionesCompleto.pdf");
            this.Response.BinaryWrite(pdfContent);
            this.Response.End();
        }

        protected void gvScoresMatriculados_RowEditing(object sender, GridViewEditEventArgs e)
        {
            gvScoresMatriculados.EditIndex = e.NewEditIndex;
            generagv();
        }

        protected void gvScoresMatriculados_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            gvScoresMatriculados.EditIndex = -1;
            generagv();
        }

        protected void gvScoresMatriculados_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            string documento="";
            string mensaje = "";
            Usuarios oUsuarios = new Usuarios();
            float SUB_TOTAL=0;	
            float TOTAL=0;
            float NOTA_FINALP=0;
            int estado = 0;
            int index = e.RowIndex;
            documento = gvScoresMatriculados.DataKeys[index].Value.ToString();
            //btnCancelar.Text= documento;
            GridViewRow row = (GridViewRow)gvScoresMatriculados.Rows[index];

            TextBox READING      = (TextBox)row.Cells[2].Controls[0];
            TextBox LISTENING    = (TextBox)row.Cells[3].Controls[0];
            TextBox SPEAKING     = (TextBox)row.Cells[4].Controls[0];
            TextBox WRITING      = (TextBox)row.Cells[5].Controls[0];
            TextBox EXAMEN_FINAL = (TextBox)row.Cells[7].Controls[0];
            TextBox SUPLETORIO   = (TextBox)row.Cells[9].Controls[0];
            TextBox NOTA_FINAL   = (TextBox)row.Cells[10].Controls[0];


            SUB_TOTAL = float.Parse(READING.Text) + float.Parse(LISTENING.Text) + float.Parse(SPEAKING.Text) + float.Parse(WRITING.Text);
            TOTAL = SUB_TOTAL + float.Parse(EXAMEN_FINAL.Text);

            if (TOTAL < 7)
            {
                TOTAL = SUB_TOTAL + float.Parse(SUPLETORIO.Text);
            }

            if (float.Parse(READING.Text) == 0 || float.Parse(LISTENING.Text) == 0 
                || float.Parse(SPEAKING.Text) == 0|| float.Parse(WRITING.Text) == 0
                || float.Parse(EXAMEN_FINAL.Text) == 0)
            {
                NOTA_FINALP = float.Parse(NOTA_FINAL.Text);
            }
            else
            {
                NOTA_FINALP = TOTAL;
            }
            
            if (NOTA_FINALP >= 7)
            {
                estado = 1;
            }
            else
            {
                estado = 2;
            }

            oUsuarios.parametro1 = float.Parse(READING.Text);
            oUsuarios.parametro2 = float.Parse(LISTENING.Text);
            oUsuarios.parametro3 = float.Parse(SPEAKING.Text);
            oUsuarios.parametro4 = float.Parse(WRITING.Text);
            oUsuarios.examenFinal = float.Parse(EXAMEN_FINAL.Text);
            oUsuarios.supletorio = float.Parse(SUPLETORIO.Text);
            oUsuarios.subTotal = SUB_TOTAL;
            oUsuarios.total = TOTAL;
            oUsuarios.promedio = NOTA_FINALP;
            oUsuarios.ciclo = int.Parse(ddlCiclo.SelectedItem.Text);
            oUsuarios.documento = documento;
            oUsuarios.nivel = int.Parse(ddlNivel.SelectedValue);
            oUsuarios.idModulo = int.Parse(ddlNiv.SelectedValue);
            oUsuarios.idEstado = estado;
            mensaje = oUsuarios.UpdateScores();
            if (mensaje == "ACTUALIZADOCORRECTAMENTE")
            {
                ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeBien('CALIFICACIONES ACTUALIZADAS CORRECTAMENTE')", true);
                gvScoresMatriculados.EditIndex = -1;
                generagv();
            }
            else
            {
                ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('ERROR !! VERIFIQUE LOS DATOS')", true);    
            }
        }

        protected void gvScoresMatriculados_Load(object sender, EventArgs e)
        {
            if (gvScoresMatriculados.Rows.Count > 0)
                ScriptManager.RegisterStartupScript(this, this.GetType(), "Dttable", String.Format("CargaDataTable('{0}',{1});", "Contenido_gvScoresMatriculados", gvScoresMatriculados.Rows[0].Cells.Count), true);
        }

        protected void gvScoresMatriculados_PreRender(object sender, EventArgs e)
        {
            GridView gvScoresMatriculados = (sender) as GridView;
            if (gvScoresMatriculados.Rows.Count > 0)
            {
                //This replaces <td> with <th> and adds the scope attribute
                gvScoresMatriculados.UseAccessibleHeader = true;

                //This will add the <thead> and <tbody> elements
                gvScoresMatriculados.HeaderRow.TableSection = TableRowSection.TableHeader;

                //This adds the <tfoot> element. 
                //Remove if you don't have a footer row
                gvScoresMatriculados.FooterRow.TableSection = TableRowSection.TableFooter;
            }
        }
    }
}